home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 30
/
Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso
/
Aminet
/
gfx
/
misc
/
gnuplot-3.7src.lha
/
gnuplot-3.7src
/
gnuplot-3.7.lha
/
gnuplot-3.7
/
term
/
cgi.trm
< prev
next >
Wrap
Text File
|
1998-11-26
|
7KB
|
319 lines
/*
* $Id: cgi.trm,v 1.12 1998/04/14 00:17:32 drd Exp $
*
*/
/* GNUPLOT - cgi.trm */
/*
* Copyright (C) 1990 - 1993 Ronald Florence
*
* Permission is hereby granted for unlimited non-commercial
* use of this code, on condition that the copyright
* notices are left intact and any modifications to the source
* code are noted as such. No warranty of any kind is implied
* or granted for this material.
*
* This file is included by ../term.h.
*
* This terminal driver supports SCO CGI drivers
*
* AUTHOR
* Ronald Florence <ron@mlfarm.com>
*/
/*
* adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
*/
#include "driver.h"
#ifdef TERM_REGISTER
register_term(cgi)
register_term(hcgi)
#endif
#ifdef TERM_PROTO
TERM_PUBLIC void CGI_init __PROTO((void));
TERM_PUBLIC void HCGI_init __PROTO((void));
TERM_PUBLIC void CGI_graphics __PROTO((void));
TERM_PUBLIC void CGI_text __PROTO((void));
TERM_PUBLIC void CGI_reset __PROTO((void));
TERM_PUBLIC void CGI_move __PROTO((unsigned int x, unsigned int y));
TERM_PUBLIC void CGI_vector __PROTO((unsigned int x, unsigned int y));
TERM_PUBLIC void CGI_linetype __PROTO((int linetype));
TERM_PUBLIC void CGI_put_text __PROTO((unsigned int x, unsigned int y, char *str));
TERM_PUBLIC int CGI_text_angle __PROTO((int ang));
TERM_PUBLIC int CGI_justify_text __PROTO((enum JUSTIFY mode));
TERM_PUBLIC void CGI_point __PROTO((unsigned int x, unsigned int y, int num));
#define CGI_XMAX 32767
#define CGI_YMAX 32767
#define CGI_VTIC (CGI_YMAX / 75)
#define CGI_HTIC term->h_tic
#define CGI_VCHAR term->v_char
#define CGI_HCHAR term->h_char
#endif
#ifndef TERM_PROTO_ONLY
#ifdef TERM_BODY
#ifdef VGA_MONO
static short rgb[16][3] =
{
0, 0, 0, /* Black */
1000, 1000, 1000, /* White */
800, 800, 0, /* Red */
0, 600, 0, /* Green */
0, 800, 800, /* Blue */
1000, 1000, 400, /* Yellow */
0, 600, 600, /* Cyan */
600, 600, 600, /* Magenta */
800, 800, 0, /* Brown */
600, 600, 600, /* Lt. Grey */
400, 600, 400, /* Dark Grey */
400, 600, 1000, /* Lt. Blue */
400, 1000, 400, /* Lt Green */
400, 1000, 1000, /* Lt Cyan */
1000, 600, 400, /* Lt Red */
600, 600, 1000 /* Lt Magenta */
};
#endif
#define CRT (gout[45] == 0)
#define CGICOLORS gout[13]
#define CGILINES gout[6]
#define CGIROTATES gout[36]
#define CGITEXTALIGN gout[48]
static short gout[66];
static short cgidev;
static short vect[4];
static short gin[19] =
{
0, /* default aspect ratio */
1, /* solid line */
1, /* line color */
1, /* marker type . */
1, /* marker color */
1, /* graphics text font */
1, /* graphics text color */
0, /* fill interior style */
0, /* fill style index */
1, /* fill color index */
1 /* prompt for paper changes */
};
char *cgidriver, *getenv();
TERM_PUBLIC void CGI_init()
{
if (getenv(cgidriver = "CGIDISP") == NULL)
HCGI_init();
}
TERM_PUBLIC void HCGI_init()
{
if (getenv(cgidriver = "CGIPRNT") == NULL)
int_error("no CGI driver", NO_CARET);
}
TERM_PUBLIC void CGI_graphics()
{
int i, aspect;
char *s;
short font_cap[9];
char err_str[80];
if ((s = getenv("ASPECT")) != NULL && (aspect = atoi(s)) >= 0 && aspect <= 3)
gin[0] = aspect;
for (i = 0; cgidriver[i]; i++)
gin[11 + i] = cgidriver[i];
gin[18] = ' ';
if (v_opnwk(gin, &cgidev, gout) < 0) {
sprintf(err_str, "CGI error %d opening %s", -vq_error(), cgidriver);
int_error(err_str, NO_CARET);
}
vqt_representation(cgidev, 9, font_cap);
CGI_VCHAR = font_cap[8] * 3 / 2;
CGI_HCHAR = font_cap[7];
CGI_HTIC = CGI_VTIC * ((double) gout[1] / (double) gout[4]) /
((double) gout[0] / (double) gout[3]);
#ifdef VGA_MONO
if (CGICOLORS > 2)
vsc_table(cgidev, 0, CGICOLORS, rgb);
#endif
}
TERM_PUBLIC void CGI_text()
{
if (CRT) {
short ptin[2];
char strin[2];
ptin[0] = 0;
ptin[1] = 0;
vrq_string(cgidev, 1, 0, ptin, strin);
}
v_clswk(cgidev);
}
TERM_PUBLIC void CGI_reset()
{
}
TERM_PUBLIC void CGI_move(x, y)
unsigned int x, y;
{
vect[0] = x;
vect[1] = y;
}
TERM_PUBLIC void CGI_vector(x, y)
unsigned int x, y;
{
vect[2] = x;
vect[3] = y;
v_pline(cgidev, 2, vect);
vect[0] = x;
vect[1] = y;
}
TERM_PUBLIC void CGI_linetype(linetype)
int linetype;
{
short lcolor;
if (CGICOLORS > 2) {
lcolor = (linetype + 2) % CGICOLORS + 1;
vsl_color(cgidev, lcolor);
vsm_color(cgidev, lcolor);
}
vsl_type(cgidev, (linetype < 1) ? 1 : (linetype % CGILINES) + 1);
}
TERM_PUBLIC void CGI_put_text(x, y, str)
unsigned int x, y;
char *str;
{
v_gtext(cgidev, (short) x, (short) y, str);
}
TERM_PUBLIC CGI_text_angle(ang)
int ang;
{
if (!CGIROTATES)
return FALSE;
/* angles are 1/10 degree ccw */
vst_rotation(cgidev, (ang) ? 900 : 0);
return TRUE;
}
TERM_PUBLIC CGI_justify_text(mode)
enum JUSTIFY mode;
{
short hor_in, hor_out, vert_out;
if (!CGITEXTALIGN)
return FALSE;
switch (mode) {
case LEFT:
hor_in = 0;
break;
case CENTRE:
hor_in = 1;
break;
case RIGHT:
hor_in = 2;
break;
}
vst_alignment(cgidev, hor_in, 1, &hor_out, &vert_out);
return TRUE;
}
#define POINT_TYPES 6
TERM_PUBLIC void CGI_point(x, y, num)
unsigned int x, y;
int num;
{
short point[2];
static short cgimarker[POINT_TYPES] = { 1, 2, 6, 4, 5, 3 };
/* . + <> [] X * */
if (num < 0) {
CGI_move(x, y);
CGI_vector(x, y);
} else {
vsm_type(cgidev, cgimarker[num % POINT_TYPES]);
point[0] = x;
point[1] = y;
v_pmarker(cgidev, 1, point);
}
}
#endif /* TERM_BODY */
#ifdef TERM_TABLE
TERM_TABLE_START(cgi_driver)
"cgi", "SCO CGI drivers (requires CGIDISP or CGIPRNT env variable)",
CGI_XMAX, CGI_YMAX, 0, 0,
CGI_VTIC, 0, options_null, CGI_init, CGI_reset,
CGI_text, null_scale, CGI_graphics, CGI_move, CGI_vector,
CGI_linetype, CGI_put_text, CGI_text_angle,
CGI_justify_text, CGI_point, do_arrow, set_font_null
TERM_TABLE_END(cgi_driver)
#undef LAST_TERM
#define LAST_TERM cgi_driver
TERM_TABLE_START(hcgi_driver)
"hcgi", "SCO CGI drivers (hardcopy, requires CGIPRNT env variable)",
CGI_XMAX, CGI_YMAX, 0, 0,
CGI_VTIC, 0, options_null, HCGI_init, CGI_reset,
CGI_text, null_scale, CGI_graphics, CGI_move, CGI_vector,
CGI_linetype, CGI_put_text, CGI_text_angle,
CGI_justify_text, CGI_point, do_arrow, set_font_null
TERM_TABLE_END(hcgi_driver)
#undef LAST_TERM
#define LAST_TERM hcgi_driver
#endif /* TERM_TABLE */
#endif /* TERM_PROTO_ONLY */
#ifdef TERM_HELP
START_HELP(cgi)
"1 cgi",
"?commands set terminal cgi",
"?set terminal cgi",
"?set term cgi",
"?terminal cgi",
"?term cgi",
"?cgi",
"?commands set terminal hcgi",
"?set terminal hcgi",
"?set term hcgi",
"?terminal hcgi",
"?term hcgi",
"?hcgi",
" The `cgi` and `hcgi` terminal drivers support SCO CGI drivers. `hcgi` is for",
" printers; the environment variable CGIPRNT must be set. `cgi` may be used",
" for either a display or hardcopy; if the environment variable CGIDISP is set,",
" then that display is used. Otherwise CGIPRNT is used.",
"",
" These terminals have no options."
END_HELP(cgi)
#endif